/*
 * 02文件字符读写.c
 *
 *  Created on: 2024年3月16日
 *      Author: HP
 */
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

int main1002(){
	FILE* fp = fopen("D:/zsl/a.txt", "r");
	if(!fp){
		printf("打开文件失败\n");
		return -1;
	}
	// 文件字符读取
	char ch;
	ch = fgetc(fp);
	printf("%c\n", ch);
	// fp++; // 不需要这样，每次读取完后，fp会自动往后走
	// 读取到文件结尾，文件是以-1结尾
	ch = fgetc(fp);
	printf("%c\n", ch);

	fclose(fp);
	return 0;
}

int main100201(){
	FILE* fp = fopen("D:/zsl/a.txt", "r");
	char ch;
	// 在C语言中，EOF表示文件结束符(endoffile)。在while循环中以 EOF 作为文件结束标志，这种以EOF作为文件结束标志的文件，必须是文本文件。
	// 在文本文件中，数据都是以字符的ASCII代码值的形式存放。我们知道，ASCII代码值的范围是0~127，不可能出现-1，因此可以用EOF作为文件结束标志。
	// 当把数据以二进制形式存放到文件中时，就会有-1值的出现，因此不能采用EOF作为二进制文件的结束标志。
	// 为解决这一个问题，ANSIC提供一个feof函数，用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。
	while((ch=fgetc(fp)) != EOF){
		printf("%c", ch);
	}
	fclose(fp);
	return 0;
}

int main100202(){
	// 以写的方式打开文件，如果文件不存在会创建一个新文件，如果文件存在会清空内容
	FILE* fp = fopen("D:/zsl/a.txt", "w");
	if(!fp){
		return -1;
	}
	char ch = 'a';
	// 字符写入
	fputc(ch, fp);

	fclose(fp);
	return 0;
}

int main100203(){
	FILE* fp = fopen("D:/zsl/a.txt", "w");
	if(!fp){
		return -1;
	}
	char ch;
	while(1){
		scanf("%c", &ch);
		if(ch == '@'){
			break;
		}
		fputc(ch, fp);
	}
	fclose(fp);
	return 0;
}
